ExcelVBA字母加数字实现列递增

您所在的位置:网站首页 excel 递加 ExcelVBA字母加数字实现列递增

ExcelVBA字母加数字实现列递增

2024-07-13 19:55| 来源: 网络整理| 查看: 265

先上代码。

Function englishAdd(ByVal str As String) Dim h As Integer h = Len(str) Do While h > 0 While Mid(str, h, 1) = "Z" h = h - 1 If h = 0 Then englishAdd = String(Len(str) + 1, "A") Exit Function End If Wend Mid(str, h, 1) = Chr(Asc(Mid(str, h, 1)) + 1) englishAdd = Mid(str, 1, h) & String(Len(str) - h, "A") Exit Do Loop End Function

调用格式为:temp=englishAdd(string),其中string为需要递增的字符串(字母)

例:str="XFZ"

       str=englishAdd(str)

运行后str的值变为"XGA",自加了1列。

下面进行速度测试。本次测试选用了三种不同的列数递增方式,区别如下:

1、提取单元格所在地址字符串,使用split()函数进行拆分后提取,简单易懂。

2、将单元格所在列数转换成字母表示。转载自https://blog.csdn.net/gold_star/article/details/52527087,此方法是将数字直接转换成字母表示。

3、采用以上代码进行测试。

为保证测试代码的过程一致性,顾把以上代码中原本按值传递的str改为按引用传递,省去临时变量的赋值操作。

由于递增的列数为从1开始,Excel文件最大列数为16384,顾进行如下代码测试:

Sub 方法1() Dim v(2 To 16384) As String, a As Double a = Timer For num = 2 To 16384 v2 = Split(Cells(1, num).Address, "$") v(num) = v2(1) Next Debug.Print Timer - a End Sub Sub 方法2() Dim v(2 To 16384) As String, st As String, a As Double a = Timer For num = 2 To 16384 v(num) = f(num) Next Debug.Print Timer - a End Sub Sub 方法3() Dim v(2 To 16384) As String, str As String, a As Double str = "A" a = Timer For num = 2 To 16384 v(num) = englishAdd(str) Next Debug.Print Timer - a End Sub

 其中方法2的f()函数转自https://blog.csdn.net/gold_star/article/details/52527087,只是把其中的t改成了按值传递,方便测试。

下面是运行时间(手动按7次F5,通过debug记录运行时间):

方法1:方法2方法3 .15234375  .0390625  .0234375  .1640625 .0546875  .01953125 .15625 .05078125 .01953125 .15625 .05078125 .0234375 .16015625 .05859375 .01953125 .16015625 .05078125 .01953125  .16015625  .05859375 .0234375 

可以看出方法3的最长时间比方法2的最快运行时间高了0.1秒以上,而方法1就省略了。

如果能够帮到你的话欢迎转载。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3